package com.fl.log_interception.interceptor;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: fulin
 * @Date: 2021/12/18/15:37
 * @Description:
 */
@Aspect
@Component
public class RolePermission {

    //切点 service下的所有方法
    @Pointcut("execution(public * com.fl.log_interception.service.*.*(..))")
    public void getRole() {

    }

    @Around("getRole()")
    public Object intercept(ProceedingJoinPoint point) throws Throwable {
        //获取到这样的信息 :修饰符+ 包名+组件名(类名) +方法名，
        Signature signature = point.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        //获取方法名
        Method method = methodSignature.getMethod();
        //判断是否含有Role注解
        if (!method.isAnnotationPresent(Role.class)) {
            //没有注解 放过
            return point.proceed();
        }
        //判断用户是否登录
        //没有写保存用户信息逻辑 所以放过
//        if ()
        //得到方法上的注解以及参数
        Role role = method.getAnnotation(Role.class);
        byte b = role.baseRole();
        //这里就是简便一下 如果baseRole是 1有权限 2没有权限
        if (b == 1){
            return point.proceed();
        }else if (b  == 2){
            //这里是模拟 正常没有权限就直接抛出异常
            System.out.println("你没有权限:"+b);
            return null;
        }
        System.out.println("你没有权限:"+b);
        return null;
    }
}
